package com.dlc.shop.live.common.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dlc.shop.bean.param.LiveRoomParam;
import com.dlc.shop.bean.vo.wukong.RegisterOrLoginVO;
import com.dlc.shop.common.util.PageParam;
import com.dlc.shop.live.common.dto.LiveRoomDto;
import com.dlc.shop.live.common.model.LiveRoom;
import com.dlc.shop.live.common.vo.LiveRoomVO;
import me.chanjar.weixin.common.error.WxErrorException;

import java.util.List;

/**
 * @author lhd
 * @date 2020-08-05 08:53:17
 */
public interface LiveRoomService extends IService<LiveRoom> {

    /**
     * 保存直播间信息
     *
     * @param liveRoom 直播间信息
     */
    void saveLiveRoom(LiveRoom liveRoom);

    /**
     * 更新直播间信息
     * @param liveRoom
     */
    void updateLiveRoom(LiveRoom liveRoom);

    /**
     * 获取商品可用的直播间信息
     *
     * @param prodId 商品id
     * @return 直播间信息列表
     */
    List<LiveRoomParam> getLivingRoomByProdId(Long prodId);

    /**
     * 获取直播间信息
     *
     * @param page     分页信息
     * @param liveRoom 直播间信息
     * @return 直播间信息列表
     */
    IPage<LiveRoomDto> pageRoomAndDetail(PageParam<LiveRoomDto> page, LiveRoomParam liveRoom);

    /**
     * 后台分页获取直播信息
     * @param page
     * @param liveRoom
     * @return
     */
    IPage<LiveRoom> pageLiveRoom(PageParam<LiveRoom> page, LiveRoom liveRoom);

    /**
     * 删除直播间
     *
     * @param id     直播间id
     * @param shopId 店铺id
     * @return 是否删除成功
     * @throws WxErrorException
     */
    Boolean removeRoomById(Long id, Long shopId);

    /**
     * 下线直播间
     * @param liveRoom
     */
    void offline(LiveRoom liveRoom);

    /**
     * 获取用户当前正在开播的直播间信息
     * @param userId
     * @param roomId
     * @return
     */
    LiveRoomVO getLivingRoomInfo(String userId, Long roomId);

    /**
     * 根据用户id获取该用户开播的直播间信息
     * @param userId
     * @return
     */
    LiveRoomVO getByUserId(String userId);

    /**
     * 更新直播间状态
     * @param liveStatus
     * @param roomIds
     */
    void updateLiveRoomStatus(Integer liveStatus, List<Long> roomIds);

    /**
     * 获取直播观看人数
     * @param roomId
     * @param changeCount
     * @return
     */
    Integer getLiveUserCount(Long roomId, Integer changeCount);

    /**
     * 直播用户注册/登录
     * @param livingRoom
     * @param roomId
     * @param token
     * @param userId
     * @return
     */
    RegisterOrLoginVO liveUserLogin(LiveRoomVO livingRoom, Long roomId, String token, String userId);

    /**
     * 将用户踢出直播间
     * @param userId
     * @param isDestroy
     */
    void quitUser(String userId, Boolean isDestroy);
}
